#ifndef __SQL_OPERATIONS_H__
#define __SQL_OPERATIONS_H__

#include "head.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <pthread.h>
#include <sqlite3.h>

/*
    更新 state

*/
int update_state_by_id(sqlite3 *db, int id, const char *new_state);

/*
    更新 client_data

*/
int update_client_data_by_id(sqlite3 *db, int id, const char *new_Ip, int new_Port, int new_Sockfd);


int send_client_by_id(sqlite3 *db, int id,char * msg, int send_Sock_fd);


void findFriendIDsByNameID(sqlite3 *db, int name_ID, int Sock_fd);



void findgroup_name_ByNameID(sqlite3 *db, int name_ID, int Sock_fd);

/*

通过群聊名称
        查找 成员ID
        发送 buff 给群组成员

需要添加 发送者   ID      不让非群组人员发送群消息 
*/

int sql_get_group_by_groupname(sqlite3 *db, const char *groupname  ,int Sock_fd ,char *buff);

/*

比对 是否为好友 
        0  为好友
        -1 不为好友
        -2 好友不在线
*/
int find_Friend(sqlite3 *db, int name_ID, int ID);

/*比对 是否为有这个组
         0  为无
         1  为有
*/
int find_group(sqlite3 *db, const char *group_name);


/// @brief              获取 msg_data表中  与  name_ID 所有 有好友关联的 用户 的  朋友圈消息 并发送给所有用户
/// @param db           数据库
/// @param name_ID      登录的用户
/// @param Sock_fd      套接字描述符
void send_msg_by_Friends(sqlite3 *db, int name_ID,int Sock_fd);



/// @brief 
/// @param db 
/// @param new_state 
/// @param new_Ip 
/// @param new_Port 
/// @param new_sock_fd 
/// @return 
int reset_state(sqlite3 *db, const char * new_state ,const char *new_Ip, int new_Port,int new_sock_fd);

/// @brief              更新用户名
/// @param db 
/// @param id 
/// @param new_name 
/// @return 
int update_name_by_id(sqlite3 *db, int id, const char *new_name);
/// @brief      修改密码
/// @param db 
/// @param id 
/// @param new_password 
/// @return 
int update_password_by_id(sqlite3 *db, int id, const char *new_password);


/// @brief              发送好友请求 将数据表      好友状态 state 设置为 wait   等待好友申请通过 
/// @param db 
/// @param name 
/// @param name_ID 
/// @param Friends 
/// @param Friends_ID 
/// @return 
int post_Friends(sqlite3 *db,char *name,int name_ID,char *Friends ,int Friends_ID);




/// @brief          同意好友申请
/// @param db 
/// @param name 
/// @param name_ID 
/// @param Friends 
/// @param Friends_ID 
/// @return 
int agree_Friends(sqlite3 *db, char *name, int name_ID, char *Friends, int Friends_ID);



/// @brief              // 返回 1 表示存在，返回 0 表示不存在
/// @param db 
/// @param group_name 
/// @param ID 
/// @return 
int find_ID_by_group(sqlite3 *db, const char *group_name,int ID);

/// @brief              查找群成员
/// @param db 
/// @param group_name   群名称
/// @return 
int send_username_by_groupname(sqlite3 *db, const char *group_name,int Sock_fd);
#endif